//定义一个常量 存储的是缓存的键
export const KEY = 'goodsData';

//定义一个对象存默认的要传入的值
export var dataObj = {
	goodsid: 0,//商品id 
	count: 0  //商品个数
}

//添加数据到浏览器
export function setItem (obj) {
	//获取缓存的值 (json形式的字符串)
	var jsonStr = localStorage.getItem(KEY);
	//若存在则直接获取  若没有则赋值为空数组
	jsonStr = jsonStr || '[]';
	//将数据转为json对象
	var arr = JSON.parse(jsonStr);
	//将数据存进去
	arr.push(obj);
	//将数据转为json形式的字符串之后再存入浏览器
	localStorage.setItem(KEY, JSON.stringify(arr));
}

//获取数据
export function getItem () {
	var jsonStr = localStorage.getItem(KEY);
	jsonStr = jsonStr || '[]';
	return JSON.parse(jsonStr);//json格式数据(数组)
}


//获取缓存的数据  处理数据格式  ->>用于请求购物车商品  进行动态渲染数据
export function getGoodsList () {
	//定义一个对象用于存储处理好的数据
	var obj = {};
	//获取缓存数据
	var data = getItem();
	//遍历  处理数据
	//数组中每一项是对象  将对象第一个数据作为新对象的属性  第二个数据作为新对象的属性值
	for (var i = 0; i < data.length; i++) {
		var item = data[i];
		//如果新对象中存在某个id数据  那么就将值追加到上面
		if (obj[item.goodsid]) {
			obj[item.goodsid] += item.count;
		} else {
			//若不存在  就直接将数据存到属性上
			obj[item.goodsid] = item.count;
		}
	}
	return obj;
}

//更新数据(删除或添加) 参数dataObj格式->> {goodsid:88, type: 'add'}
export function updateData (dataObj) {
	//先获取缓存数据
	var data = getItem();
	//如果是添加则直接在数据的后面追加一个对象
	if (dataObj.type == 'add') {
		
		data.push({goodsid: dataObj.goodsid, count: 1});
		
	} else if (dataObj.type == 'substrict') {
		//如果是减 先遍历data 通过id找到商品  判断当前商品id的商品个数
		for (var i = 0; i < data.length; i++) {
			//找到商品id 
			if (data[i].goodsid == dataObj.goodsid) {
				//判断当前的商品数量 如果大于1 则减去1 否则直接删除此商品
				if (data[i].count > 1) {
					data[i].count -= 1;
					break;   //直接退出循环
				} else {
					data.splice(i, 1);
					break;   //直接退出循环
				}
			}
		}
	}
	//将更新之后的数据再存入缓存
	localStorage.setItem(KEY, JSON.stringify(data));
}

//删除数据
export function removeData(goodsid) {
	//先获取缓存数据
	var data = getItem();
	//遍历data找到对象商品id 进行删除
	//注意遍历时应当从最后一项开始  否则满足条件的数据有可能会删不完
	for (var i = data.length - 1; i >= 0; i--) {
		if (data[i].goodsid == goodsid) {
			data.splice(i, 1);
		}
	}
	//将处理好的数据重新存储到缓存中
	localStorage.setItem(KEY, JSON.stringify(data));
}

